﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
using System.Security.Cryptography;

namespace QuanLyNhaSach
{
    public class KiemTraBatLoi
    {

        #region Xử lý chuỗi có dấu thành ko có dấu
        private readonly string[] VietnameseSigns = new string[]{
                                                                 "aAeEoOuUiIdDyY",
                                                                 "áàạảãâấầậẩẫăắằặẳẵ",
                                                                 "ÁÀẠẢÃÂẤẦẬẨẪĂẮẰẶẲẴ",
                                                                 "éèẹẻẽêếềệểễ",
                                                                 "ÉÈẸẺẼÊẾỀỆỂỄ",
                                                                 "óòọỏõôốồộổỗơớờợởỡ",
                                                                 "ÓÒỌỎÕÔỐỒỘỔỖƠỚỜỢỞỠ",
                                                                 "úùụủũưứừựửữ",
                                                                 "ÚÙỤỦŨƯỨỪỰỬỮ",
                                                                 "íìịỉĩ",
                                                                 "ÍÌỊỈĨ",
                                                                 "đ",
                                                                 "Đ",
                                                                 "ýỳỵỷỹ",
                                                                 "ÝỲỴỶỸ"
                                                                 };
        /// <summary>
        /// Hàm sẽ thay thế các kí tự có dấu thành những kí tự không dấu
        /// </summary>
        /// <param name="str">Nhập vào chuỗi kí tự cần thay thế</param>
        /// <returns>Trả về 1 chuỗi kí tự không dấu</returns>
        public string RemoveSign4VietnameseString(string str)
        {
            //Tiến hành thay thế , lọc bỏ dấu cho chuỗi
            for (int i = 1; i < VietnameseSigns.Length; i++)
            {
                for (int j = 0; j < VietnameseSigns[i].Length; j++)
                    str = str.Replace(VietnameseSigns[i][j], VietnameseSigns[0][i - 1]);
            }
            return str;
        }
        #endregion

        #region Mã hóa chuỗi
        /// <summary>
        /// Dùng để mã hóa Password sang dạng MD5
        /// </summary>
        /// <param name="Password">Truyền chuỗi password cần mã hóa VD: "Caigiday"</param>
        /// <returns>Trả về đoạn mật khẩu đã được mã hóa</returns>
        public string MahoaPassword(string Password)
        {
            Byte[] originalBytes;
            Byte[] encodedBytes;
            MD5 md5;
            // Chuyen kieu  password sang  bytes; Tao hash 
            md5 = new MD5CryptoServiceProvider();
            originalBytes = ASCIIEncoding.Default.GetBytes(Password);
            encodedBytes = md5.ComputeHash(originalBytes);
            // Bytes to string
            return System.Text.RegularExpressions.Regex.Replace(BitConverter.ToString(encodedBytes), "-", "").ToLower();

        }
        #endregion

        #region Xử lý mã và kiểm tra

        /// <summary>
        /// Hàm kiểm tra Email. Trả về true nếu email valid và ngược lại
        /// </summary>
        /// <param name="Chuoi_Kiem_Tra"> chuỗi cần kiểm tra Email </param>
        /// <returns> true/false </returns>
        public bool TestValidEmail(string Chuoi_Kiem_Tra)
        {
            string ValidEmail = @"^[A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$";
            return Regex.IsMatch(Chuoi_Kiem_Tra, ValidEmail);
        }

        /// <summary>
        /// Hàm kiểm tra Số. Trả về true nếu là Số và ngược lại false là Chữ.
        /// </summary>
        /// <param name="Chuoi_Kiem_Tra"> Truyền vào ký tự cần kiểm tra </param>
        /// <returns> true/false </returns>
        public bool Is_Numbers(string Chuoi_Kiem_Tra)
        {
            string number_test = @"^\d+$";
            return Regex.IsMatch(Chuoi_Kiem_Tra, number_test);
        }

        /// <summary>
        /// Hàm kiểm tra Họ Tên không số. Trả về true nếu là Họ Tên và ngược lại false là có Số.
        /// </summary>
        /// <param name="Chuoi_Kiem_Tra"> Truyền vào Họ Tên </param>
        /// <returns> true/false </returns>
        public bool Is_HoTen(string Chuoi_Kiem_Tra)
        {
            string hoTen_test = @"^[^0-9]\w[^0-9]+$";
            return Regex.IsMatch(Chuoi_Kiem_Tra, hoTen_test);
        }

        /// <summary>
        /// Hàm kiểm tra giá trị(Value)Số: 0 < Value_So < 10000. Trả về true nếu 0 < Value_So < 10000  và ngược lại false.
        /// </summary>
        /// <param name="Chuoi_Kiem_Tra"> Truyền vào giá trị Số </param>
        /// <returns> true/false </returns>
        public bool Is_ValueSo_10000(double value_so)
        {
            if (value_so <= 0 || value_so > 10000)
                return false;
            else
                return true;
        }

        /// <summary>
        /// Hàm kiểm tra giá trị(Value)Số: 0 < Value_So < 100 tỉ. Trả về true nếu 0 < Value_So < 1000 và ngược lại false là có Số.
        /// </summary>
        /// <param name="Chuoi_Kiem_Tra"> Truyền vào giá trị Số </param>
        /// <returns> true/false </returns>
        public bool Is_ValueSo_100Ti(double value_so)
        {
            if (value_so <= 0 || value_so >= 100000000000)
                return false;
            else
                return true;
        }

        /// <summary>
        /// Hàm kiểm tra Độ Dài Số ĐT. Trả về true nếu là đúng độ dài DT và ngược lại false là sai độ dài Số DT.
        /// </summary>
        /// <param name="Chuoi_Kiem_Tra"> Truyền vào Họ Tên </param>
        /// <returns> true/false </returns>
        public bool Is_DoDaiSoDT(string Chuoi_Kiem_Tra)
        {
            string SoDT_test = @"^\d{8,11}$";
            return Regex.IsMatch(Chuoi_Kiem_Tra, SoDT_test);
        }
        #endregion
                /// <summary>
        /// Hàm kiểm tra Độ Dài Số ĐT. Trả về true nếu là đúng độ dài DT và ngược lại false là sai độ dài Số DT.
        /// </summary>
        /// <param name="Chuoi_Kiem_Tra"> Truyền vào Họ Tên </param>
        /// <returns> true/false </returns>
        public bool Is_DoDaiCMND(string Chuoi_Kiem_Tra)
        {
            string CMND_test = @"^\d{9,9}$";
            return Regex.IsMatch(Chuoi_Kiem_Tra, CMND_test);
        }
    }
}
